package com.aye.notepad;

import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

public class Menu extends HorizontalScrollView {
    private LinearLayout ScrollView;//定义横向滚动条布局
    private ViewGroup Menu;//定义菜单区域
    private ViewGroup Content;//定义主显示区域
    private int ScreenWidth;//等一屏幕宽度
    private int MenuRightPadding=50;//定义菜单右边距为50dp
    private boolean call;//标记定义只设置一次横向滚动视图与子视图的宽度
    private int MenuWidth;//定义菜单宽度
    public Menu(Context context, AttributeSet attrs) {
        super(context,attrs);
        //获取窗口管理服务
        WindowManager wm=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        //创建显示尺寸对象
        DisplayMetrics outMetrics=new DisplayMetrics();
        //获取当前屏幕的宽高尺寸
        wm.getDefaultDisplay().getMetrics(outMetrics);
        //为屏幕的宽度赋值
        ScreenWidth=outMetrics.widthPixels;
        //将50dp转换为像素
        MenuRightPadding=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,50,context.getResources().getDisplayMetrics());
        //设置横向滚动视图中主显示区域与隐藏区域的宽度
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (!call){
            ScrollView=(LinearLayout) getChildAt(0);//获取横向滚动视图
            Menu=(ViewGroup)ScrollView.getChildAt(0);//获取菜单显示区域
            Content=(ViewGroup)ScrollView.getChildAt(1);//获取主显示区域
            MenuWidth=Menu.getLayoutParams().width=ScreenWidth-MenuRightPadding;//设置菜单宽度
            Content.getLayoutParams().width=ScreenWidth;//设置主显示区域的宽度
            call=true;
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
    //设置偏移量,让菜单隐藏
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        if (changed){
            this.scrollTo(MenuWidth,0);//隐藏菜单区域
        }
    }
    //手势判断，实现判断手指抬起时隐藏菜单还是显示菜单
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        int action=ev.getAction();
        switch (action){
            case MotionEvent.ACTION_UP:
                int scrollX=getScrollX();//获取隐藏左边的宽度
                if (scrollX>=MenuWidth/2){
                    this.scrollTo(MenuWidth,0);//设置隐藏菜单
                }else {
                    this.scrollTo(0,0);//显示菜单
                }
                return true;
        }
        return super.onTouchEvent(ev);
    }
}
